package com.idis.dbApp.mapper;

import com.idis.entity.person;
import org.apache.ibatis.annotations.*;
import org.apache.ibatis.type.JdbcType;

import java.util.List;

/**
 * Created by Ming on 2018/1/28.
 */

/**
 * 人员数据操作
 */
public interface PersonMapper {

    /**
     * 获取所有人员信息
     * @return 人员信息集
     */
    @Select({
            "select * from person"
    })
    List<person>  findAll();

    /**
     * 根据examole有效属性值搜索人员，空信息无效
     * @param example 人员信息
     * @return 人员信息集
     */
    @SelectProvider(type = PersonSqlProvider.class,method = "selectByProperty")
    List<person> findByProperty(person example);

    /**
     * 删除人员信息
     * @param id 人员ID
     * @return 成功删除的数量
     */
    @Delete({
        "delete from person",
        "where id = #{id,jdbcType=INTEGER}"
    })
    int deleteByPrimaryKey(Integer id);

    /**
     * 插入新人员记录
     * @param record 人员信息
     * @return 成功插入的数量
     */
    @Insert({
        "insert into person (name, ",
        "picture, content, ",
        "type)",
        "values (#{name,jdbcType=VARCHAR}, ",
        "#{picture,jdbcType=VARCHAR}, #{content,jdbcType=VARCHAR}, ",
        "#{type,jdbcType=VARCHAR})"
    })
    int insert(person record);

    /**
     * 插入新人员信息，仅插入非空信息
     * @param record 人员信息
     * @return 成功插入的数量
     */
    @InsertProvider(type=PersonSqlProvider.class, method="insertSelective")
    int insertSelective(person record);

    /**
     * 根据ID查询人员
     * @param id 人员ID
     * @return 人员信息
     */
    @Select({
        "select",
        "id, name, picture, content, type",
        "from person",
        "where id = #{id,jdbcType=INTEGER}"
    })
    @Results({
        @Result(column="id", property="id", jdbcType=JdbcType.INTEGER, id=true),
        @Result(column="name", property="name", jdbcType=JdbcType.VARCHAR),
        @Result(column="picture", property="picture", jdbcType=JdbcType.VARCHAR),
        @Result(column="content", property="content", jdbcType=JdbcType.VARCHAR),
        @Result(column="type", property="type", jdbcType=JdbcType.INTEGER)
    })
    person selectByPrimaryKey(Integer id);

    /**
     * 更新人员信息，仅更新非空属性，ID必须
     * @param record 人员信息
     * @return 成功更新的数量
     */
    @UpdateProvider(type=PersonSqlProvider.class, method="updateByPrimaryKeySelective")
    int updateByPrimaryKeySelective(person record);

    /**
     * 更新人员信息，ID必须
     * @param record 人员信息
     * @return 成功更新的数量
     */
    @Update({
        "update person",
        "set name = #{name,jdbcType=VARCHAR},",
          "picture = #{picture,jdbcType=VARCHAR},",
          "content = #{content,jdbcType=VARCHAR},",
          "type = #{type,jdbcType=INTEGER}",
        "where id = #{id,jdbcType=INTEGER}"
    })
    int updateByPrimaryKey(person record);
}